Java 语言中的”整数型字面值“被默认当作 int 类型来处理;要让这个”整数型字面值“被当作 long 类型来处理的话,需要在后面添加 l/L,建议使用大写的 L
类型转换
- 字面值为 int类型,赋值类型也为 int类型
1 | // 123 是 int类型,i 也是 int类型,不存在类型转换 |
- 字面值为 int类型,赋值类型为 long类型
1 | long y = 2147483647; |
- 字面值为 long类型,赋值类型为 int类型
1 | long xx = 100L; |
- 字面值为 int类型,赋值类型为 byte、short、char类型
1 | // 当一个整数字面值没有超过 byte、short、char 的取值范围,这个字面值可以直接赋值给 byte、short、char类型的变量 |
精度损失
计算机在任何情况下底层表示和存储数据的时候采用了补码形式
- 正数的补码:和原码相同
- 负数的补码:负数的绝对值对应的二进制码所有二进制位取反,再加1
补码:1000000
原码计算过程:
- 10000000 - 1 –> 01111111
- 10000000 –> 128
- -128
所以,如果 byte b1 = 128
,是一定会损失精度的。原始数据 00000000 00000000 00000000 10000000
,强转之后100000000
,这是一个补码,按照上面过程,原码就是 -128